﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GestionCamping
{
    public partial class Accueil : Form
    {
        public string utilisateur;

        public Accueil()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

            this.TableauClient.Visible = true;
            refreshDGVClient();
            refreshDGVEmploye();
            refreshDGVClientRechercheRapideSejour();
            refreshDGVClientAjoutSéjour();
            System.Threading.Thread newThread;
            newThread = new System.Threading.Thread(miseAjourHeure);
            newThread.Start();
        }

        public void refreshDGVClient()
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauClient.DataSource = from c in bdd.Client where c.IsSupprime == false select c;
            }
        }

        public void refreshDGVClientRechercheRapideSejour()
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauclientRechercheRapideSéjour.DataSource = from c in bdd.Client where c.IsSupprime == false select c;
            }
        }

        private void refreshDGVClientAjoutSéjour()
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauClientAjoutSéjour.DataSource = from c in bdd.Client select c;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.TableauClient.Visible = false;
            this.clearAjoutClient();
            this.groupBoxAjoutClient.Visible = true;
            cacherMenuClient();


        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.TableauClient.Show();
            this.groupBoxAjoutClient.Hide();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            if (!(this.TextBoxNomClient.Text.Equals("")) && !(this.TextBoxPrenomClient.Text.Equals("")) && !(this.TextBoxTelephoneClient.Text.Equals(""))
                 && !(this.TextBoxRueClient.Text.Equals("")) && !(this.TextBoxNuméroClient.Text.Equals("")) && !(this.TextBoxLocaliteClient.Text.Equals("")))
            {
                Client client = new Client
                {
                    Nom = TextBoxNomClient.Text,
                    Prenom = TextBoxPrenomClient.Text,
                    Telephone = TextBoxTelephoneClient.Text,
                    AdresseMail = TextBoxEmailClient.Text,
                    Adresse = TextBoxRueClient.Text,
                    Numero = TextBoxNuméroClient.Text,
                    Localite = TextBoxLocaliteClient.Text,
                    DateDeNaissance = this.DatePickerAjoutClient.Value,
                    IsSupprime = false,
                };

                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    bdd.Client.AddObject(client);
                    bdd.SaveChanges();
                }

                refreshDGVClient();
                this.TableauClient.Show();
                this.groupBoxAjoutClient.Hide();
                afficherMenuClient();

            }
            else
            {
                MessageBox.Show("Veuillez remplir les champs manquants ", "Données manquantes", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (this.TextBoxNomClient.Text.Equals(""))
                {
                    ErrorNom.Show();
                }
                else
                {
                    ErrorNom.Hide();
                }

                if (this.TextBoxPrenomClient.Text.Equals(""))
                {
                    ErrorPrenom.Show();
                }
                else
                {
                    ErrorPrenom.Hide();
                }

                if (this.TextBoxTelephoneClient.Text.Equals(""))
                {
                    ErrorTel.Show();
                }
                else
                {
                    ErrorTel.Hide();
                }

                if (this.TextBoxRueClient.Text.Equals(""))
                {
                    ErrorRue.Show();
                }
                else
                {
                    ErrorRue.Hide();
                }

                if (this.TextBoxLocaliteClient.Text.Equals(""))
                {
                    ErrorLocalit.Show();
                }
                else
                {
                    ErrorLocalit.Hide();
                }


            }



        }

        private void button5_Click_1(object sender, EventArgs e)
        {
            this.TableauClient.Visible = true;
            this.groupBoxAjoutClient.Visible = false;
            afficherMenuClient();



        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (TableauClient.Rows.Count == 0)
            {
                MessageBox.Show("Aucun client n'est présent dans le tableau ", "Clients inexistants", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                Int32 nbLignesSelectionnees = TableauClient.Rows.GetRowCount(DataGridViewElementStates.Selected);
                if (nbLignesSelectionnees == 0)
                {
                    MessageBox.Show("Veuillez sélectionner au moins un client ", "Aucun client sélectionné", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {

                    int ligne = TableauClient.SelectedCells[0].RowIndex;
                    int id = (int)TableauClient["dataGridViewTextBoxColumn1", ligne].Value;

                    using (BDDCampingEntities bdd = new BDDCampingEntities())
                    {
                        Client clientASupprimer = (from c in bdd.Client where c.ID == id select c).First();
                        clientASupprimer.IsSupprime = true;
                        bdd.SaveChanges();
                    }

                    refreshDGVClient();
                }
            }

        }


        private void clearAjoutClient()
        {
            this.TextBoxNomClient.Text = "";
            this.TextBoxPrenomClient.Text = "";
            this.TextBoxEmailClient.Text = "";
            this.TextBoxTelephoneClient.Text = "";
            this.TextBoxRueClient.Text = "";
            this.TextBoxLocaliteClient.Text = "";
            this.TextBoxNuméroClient.Text = "";

            this.ErrorLocalit.Visible = false;
            this.ErrorNom.Visible = false;
            this.ErrorPrenom.Visible = false;
            this.ErrorRue.Visible = false;
            this.ErrorTel.Visible = false;


        }

        private void button2_Click(object sender, EventArgs e)
        {
            Int32 nbLignesSelectionnees = TableauClient.Rows.GetRowCount(DataGridViewElementStates.Selected);
            if (nbLignesSelectionnees == 0)
            {
                MessageBox.Show("Veuillez sélectionner un client ", "Aucun client sélectionné", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            else if (nbLignesSelectionnees > 1)
            {
                MessageBox.Show("Veuillez sélectionner qu'un seul client ", "Trop de clients sélectionnés", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                this.TableauClient.Visible = false;
                this.groupBoxModifierClient.Visible = true;
                cacherMenuClient();

                int ligne = TableauClient.SelectedCells[0].RowIndex;
                int id = (int)TableauClient["dataGridViewTextBoxColumn1", ligne].Value;
                Client clientAModifier;

                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    clientAModifier = (from c in bdd.Client where c.ID == id select c).First();
                }

                TextBoxModifNomClient.Text = clientAModifier.Nom;
                TextBoxModifPrenomClient.Text = clientAModifier.Prenom;
                TextBoxModifEmailClient.Text = clientAModifier.AdresseMail;
                TextBoxModifTelClient.Text = clientAModifier.Telephone;
                TextBoxModifNumeroClient.Text = Convert.ToString(clientAModifier.Numero);
                TextBoxModifLocaliteClient.Text = clientAModifier.Localite;
                TextBoxModifRueClient.Text = clientAModifier.Adresse;
                IdClient.Text = Convert.ToString(clientAModifier.ID);

            }

        }


        private void button6_Click_1(object sender, EventArgs e)
        {
            this.TableauClient.Visible = true;
            this.groupBoxModifierClient.Visible = false;
            afficherMenuClient();

        }



        private void button7_Click(object sender, EventArgs e)
        {

            if (!(this.TextBoxModifNomClient.Text.Equals("")) && !(this.TextBoxModifPrenomClient.Text.Equals("")) && !(this.TextBoxModifTelClient.Text.Equals(""))
                && !(this.TextBoxModifRueClient.Text.Equals("")) && !(this.TextBoxModifNumeroClient.Text.Equals("")) && !(this.TextBoxModifLocaliteClient.Text.Equals("")))
            {
                Client clientAModifier;
                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    int id = Convert.ToInt32(IdClient.Text);
                    clientAModifier = (from c in bdd.Client where c.ID == id select c).First();

                    clientAModifier.Nom = TextBoxModifNomClient.Text;
                    clientAModifier.Prenom = TextBoxModifPrenomClient.Text;
                    clientAModifier.Telephone = TextBoxModifTelClient.Text;
                    clientAModifier.AdresseMail = TextBoxModifEmailClient.Text;
                    clientAModifier.Adresse = TextBoxModifRueClient.Text;
                    clientAModifier.Numero = TextBoxModifNumeroClient.Text;
                    clientAModifier.Localite = TextBoxModifLocaliteClient.Text;
                    clientAModifier.DateDeNaissance = this.dateTimePicker1.Value;
                    bdd.SaveChanges();
                    groupBoxModifierClient.Visible = false;
                    TableauClient.Visible = true;
                    refreshDGVClient();
                    afficherMenuClient();


                    ErrorModifNom.Visible = false;
                    ErrorModifPrénom.Visible = false;
                    ErrorModifTel.Visible = false;
                    ErrorModifRue.Visible = false;
                    ErrorModifLocalite.Visible = false;

                }

            }
            else
            {
                MessageBox.Show("Veuillez remplir les champs manquants ", "Données manquantes", MessageBoxButtons.OK, MessageBoxIcon.Information);
                if (this.TextBoxModifNomClient.Text.Equals(""))
                {
                    ErrorModifNom.Show();
                }
                else
                {
                    ErrorModifNom.Hide();
                }

                if (this.TextBoxModifPrenomClient.Text.Equals(""))
                {
                    ErrorModifPrénom.Show();
                }
                else
                {
                    ErrorModifPrénom.Hide();
                }

                if (this.TextBoxModifTelClient.Text.Equals(""))
                {
                    ErrorModifTel.Show();
                }
                else
                {
                    ErrorModifTel.Hide();
                }

                if (this.TextBoxModifRueClient.Text.Equals(""))
                {
                    ErrorModifRue.Show();
                }
                else
                {
                    ErrorModifRue.Hide();
                }

                if (this.TextBoxModifLocaliteClient.Text.Equals(""))
                {
                    ErrorModifLocalite.Show();
                }
                else
                {
                    ErrorModifLocalite.Hide();
                }


            }
        }

        private void TextBoxTelephoneClient_KeyPress(object sender, KeyPressEventArgs e)
        {


        }

        private void TextBoxNuméroClient_KeyPress(object sender, KeyPressEventArgs e)
        {
            /* if (!(Char.IsDigit(e.KeyChar)))
             {
                 TextBoxNuméroClient.Clear();
             }*/


        }

        private void button4_Click_1(object sender, EventArgs e)
        {
            TableauclientRechercheRapideSéjour.Visible = false;
            RechercheRapideSéjour.Visible = false;
            groupBoxAjoutSéjour.Visible = true;
            TableauSéjour.Visible = false;
            AjouterSéjour.Visible = false;
            ModifierSéjour.Visible = false;
            SupprimerSéjour.Visible = false;
            GénérerFacture.Visible = false;

        }

        private void button11_Click(object sender, EventArgs e)
        {
            TableauclientRechercheRapideSéjour.Visible = true;
            RechercheRapideSéjour.Visible = true;
            groupBoxAjoutSéjour.Visible = false;
            TableauSéjour.Visible = true;
            AjouterSéjour.Visible = true;
            ModifierSéjour.Visible = true;
            SupprimerSéjour.Visible = true;
            GénérerFacture.Visible = true;
        }

        private void NomClientRecherche_KeyPress(object sender, KeyPressEventArgs e)
        {

            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauClientAjoutSéjour.DataSource = from c in bdd.Client where c.Nom.StartsWith(NomClientRecherche.Text) select c;
            }

            if (NomClientRecherche.Text.Equals(""))
            {
                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    this.TableauClientAjoutSéjour.DataSource = from c in bdd.Client select c;
                }
            }
        }

        private void cacherMenuClient()
        {
            AjouteClient.Visible = false;
            SupprimerClient.Visible = false;
            ModifierClient.Visible = false;
            RechercheRapideClient.Visible = false;
        }

        private void afficherMenuClient()
        {
            AjouteClient.Visible = true;
            SupprimerClient.Visible = true;
            ModifierClient.Visible = true;
            RechercheRapideClient.Visible = true;
        }

      

        private void miseAjourHeure()
        {
            while (true)
            {
                DateTime Now = DateTime.Now;
                HeureSystème.Text = Now.ToString();
            }
        }


        private void TextBoxRechercheRapideSéjourClient_KeyPress_1(object sender, KeyPressEventArgs e)
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauclientRechercheRapideSéjour.DataSource = from c in bdd.Client where c.Nom.StartsWith(TextBoxRechercheRapideSéjourClient.Text) select c;
            }

            if (TextBoxRechercheRapideSéjourClient.Text.Equals(""))
            {
                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    this.TableauclientRechercheRapideSéjour.DataSource = from c in bdd.Client select c;
                }
            }
        }

        private void TextBoxRechercheClientRapide_KeyPress(object sender, KeyPressEventArgs e)
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                this.TableauClient.DataSource = from c in bdd.Client where c.Nom.StartsWith(TextBoxRechercheClientRapide.Text) select c;
            }

            if (TextBoxRechercheClientRapide.Text.Equals(""))
            {
                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    this.TableauClient.DataSource = from c in bdd.Client select c;
                }
            }
        }

        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            MessageBox.Show((string)comboBox1.SelectedItem);

            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                comboBox2.DataSource = from c in bdd.Emplacement where c.TypeHabitat.Equals((string)comboBox1.SelectedItem) select c.ID;
            }
        }


        private void TableauClientAjoutSéjour_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            int ligne = TableauClientAjoutSéjour.SelectedCells[0].RowIndex;
            int id = (int)TableauClientAjoutSéjour["dataGridViewTextBoxColumn27", ligne].Value;

            Client clientSéjour;

            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                clientSéjour = (from c in bdd.Client where c.ID == id select c).First();
            }

            NomClientChoisiSéjour.Text = clientSéjour.Nom + " " + clientSéjour.Prenom;
            LabelSuccesAjoutClient.Visible = true;
            ImageSuccesAjoutClient.Visible = true;

        }


        /******************************* MENU EMPLOYE - JEREMY *******************************/

        //Evenement sur le bouton Ajouter dans le menu Employé
        private void buttonAjouterEmploye_Click(object sender, EventArgs e)
        {
            panelAjouter.Enabled = true;
            panelAjouter.Visible = true;

            panelSupprimer.Enabled = false;
            panelSupprimer.Visible = false;

           // panelModifier.Enabled = false;
           // panelModifier.Visible = false;
        }

        //Evenement sur le bouton Modifier dans le menu Employé
        private void buttonModifierEmploye_Click(object sender, EventArgs e)
        {
            panelAjouter.Enabled = false;
            panelAjouter.Visible = false;

            panelSupprimer.Enabled = false;
            panelSupprimer.Visible = false;

            //panelModifier.Enabled = true;
            //panelModifier.Visible = true;
        }

        //Evenement sur le bouton Supprimer dans le menu Employé
        private void buttonSupprimerEmploye_Click(object sender, EventArgs e)
        {
            panelAjouter.Enabled = false;
            panelAjouter.Visible = false;

            panelSupprimer.Enabled = true;
            panelSupprimer.Visible = true;

            //panelModifier.Enabled = false;
            //panelModifier.Visible = false;
        }

        //Evenement sur le bouton Ajouter un employé dans le menu Employé
        private void buttonValiderAjout_Click(object sender, EventArgs e)
        {
            if (tbNom.Text.Length != 0 || tbPrenom.Text.Length != 0 || tbLogin.Text.Length != 0 || tbMdp.Text.Length != 0)
            {
                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    //Requette comptant le nombre d'employé ayant le même nom et prénom que ceux spécifiés par l'utilisateur dans les textbox

                    int nbEmployeIdentique = (from employeQ in bdd.Employe
                                              where employeQ.Nom.ToLower() == tbNom.Text.ToLower() && employeQ.Prenom.ToLower() == tbPrenom.Text.ToLower()
                                              select employeQ).Count();

                    // Le nombre d'employé identique est-il > 0 Si oui -> erreur, sinon -> employé créé et ajouté à la base de donnée
                    if (nbEmployeIdentique > 0)
                    {
                        MessageBox.Show("L'employé que vous essayez d'ajouter est déjà présent dans la base de donnée.", "Erreur");
                    }
                    else
                    {
                        Employe newEmploye = new Employe
                        {
                            Nom = tbNom.Text,
                            Prenom = tbPrenom.Text,
                            Login = tbLogin.Text,
                            MDP = tbMdp.Text
                        };

                        bdd.Employe.AddObject(newEmploye);
                        bdd.SaveChanges();
                        refreshDGVEmploye();
                    }
                }
            }
            else
            {
                MessageBox.Show("Veuillez remplir tout les champs pour ajouter l'employé", "Erreur");
            }
        }

        //Evenement sur le bouton Valider pour la suppression d'un employé (et de ses modifications éventuelles) dans le menu Employé
        private void buttonValiderSuppression_Click(object sender, EventArgs e)
        {
            try
            {
                int ligne = dgvEmploye.SelectedCells[0].RowIndex;
                int id = (int)dgvEmploye["iDDataGridViewTextBoxColumn2", ligne].Value;

                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    //Requête qui récupère l'employé qui va être supprimé
                    Employe emplASupprimer = (from employe in bdd.Employe
                                              where id == employe.ID
                                              select employe).First();

                    //Requête qui récupère toutes les modifications de l'employé qui doit être supprimé
                    var listModif = from modif in bdd.Modification
                                    where modif.Fk_Employe_ID == emplASupprimer.ID
                                    select modif;

                    //Parcours de la liste des modifications et suppressions de celles-ci
                    foreach (Modification lM in listModif)
                    {
                        bdd.Modification.DeleteObject(lM);
                    }

                    //L'employé est supprimé
                    bdd.Employe.DeleteObject(emplASupprimer);

                    //La BDD est sauvée (ouraa !) et la DataGridView relative au employé est rafraîchie
                    bdd.SaveChanges();
                    refreshDGVEmploye();
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Impossible de supprimer cette ligne !", "Erreur");
            }
        }

        //Lorsque l'utilisateur clique sur une cellule d'une ligne concernant un employé, 
        //sa liste des modifications apparaît dans la DataGridView des modifications, en dessous de celle des employés
        private void dgvEmploye_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int ligne = e.RowIndex;

            //Evite une erreur d'index si l'utilisateur sélectionne le titre de la colonne
            if (ligne >= 0)
            {
                int id = (int)dgvEmploye["iDDataGridViewTextBoxColumn2", ligne].Value;

                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    //Requête qui récupère la liste des modifications de l'employé concerné est qui les affiches dans la
                    //DataGridView des modifications
                    dgvModification.DataSource = from modif in bdd.Modification
                                                 where id == modif.Fk_Employe_ID
                                                 select modif;

                }
            }
        }

        private void buttonModifier_Click(object sender, EventArgs e)
        {
            try
            {
                int ligne = dgvEmploye.SelectedCells[0].RowIndex;
                int id = (int)dgvEmploye["iDDataGridViewTextBoxColumn2", ligne].Value;

                using (BDDCampingEntities bdd = new BDDCampingEntities())
                {
                    Employe employeAModifier = (from employe in bdd.Employe
                                                where employe.ID == id
                                                select employe).First();

                    /*
                    if (tbNomModifier.Text.Length > 0)
                    {
                        employeAModifier.Nom = tbNomModifier.Text;
                    }
                    else if (tbPrenomModifier.Text.Length > 0)
                    {
                        employeAModifier.Prenom = tbPrenomModifier.Text;
                    }
                    else if (tbPrenomModifier.Text.Length > 0)
                    {
                        employeAModifier.Login = tbLoginModifier.Text;
                    }
                    else if (tbPrenomModifier.Text.Length > 0)
                    {
                        employeAModifier.MDP = tbMdpModifier.Text;
                    }*/

                    bdd.SaveChanges();
                    refreshDGVEmploye();
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show("Impossible de modifier cette ligne !", "Erreur");
            }
        }

        //Charge la DataGridViewEmploye
        public void refreshDGVEmploye()
        {
            using (BDDCampingEntities bdd = new BDDCampingEntities())
            {
                //Requête qui charge la DataGridView des employés
                this.dgvEmploye.DataSource = from employe in bdd.Employe
                                             select employe;
            }
        }

        /***************************** FIN MENU EMPLOYE - JEREMY *****************************/
























    }
}
